// 指定当前类所属的包路径，用于组织项目结构
package com.example.springboot.service.impl;
// 导入所需的类和工具包
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.springboot.entity.Visitor;
import com.example.springboot.mapper.VisitorMapper;
import com.example.springboot.service.VisitorService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

// @Service：声明当前类是 Spring 管理的服务层组件，自动注册到 Spring 容器中
@Service
// 继承 ServiceImpl 实现服务层接口，泛型参数为 Mapper 接口和实体类
public class VisitorServiceImpl extends ServiceImpl<VisitorMapper, Visitor> implements VisitorService {
    // @Resource：注入 DAO 层对象（按名称注入 VisitorMapper 接口的实现类）
    @Resource
    private VisitorMapper visitorMapper;

    /**
     * 添加新访客
     * @param visitor 待添加的访客实体对象
     * @return 影响的行数（成功返回 1，失败返回 0）
     */
    @Override// 标识重写父类方法
    public int addNewVisitor(Visitor visitor) {
        // 执行插入操作（调用 MyBatis-Plus 基础 Mapper 的插入方法）
        int insert = visitorMapper.insert(visitor);
        return insert;
    }

    /**
     * 查询访客（按姓名模糊搜索）
     * @param pageNum 当前页码
     * @param pageSize 每页显示记录数
     * @param search 搜索关键词（访客姓名）
     * @return 分页结果对象（包含总记录数和当前页数据）
     */
    @Override
    public Page find(Integer pageNum, Integer pageSize, String search) {
        // 创建分页对象（传入页码和每页大小）
        Page page = new Page<>(pageNum, pageSize);
        // 创建查询条件构造器
        QueryWrapper<Visitor> qw = new QueryWrapper<>();
        // 添加条件：姓名（name）模糊匹配搜索词
        qw.like("name", search);
        // 执行分页查询（调用 Mapper 的分页查询方法）
        Page visitorPage = visitorMapper.selectPage(page, qw);
        return visitorPage;
    }

    /**
     * 更新访客信息（根据 ID 更新）
     * @param visitor 包含更新后数据的访客实体对象（需包含 ID）
     * @return 影响的行数（成功返回 1，失败返回 0）
     */
    @Override
    public int updateNewVisitor(Visitor visitor) {
        // 执行更新操作（调用 MyBatis-Plus 基础 Mapper 的根据 ID 更新方法）
        int i = visitorMapper.updateById(visitor);
        return i;
    }

    /**
     * 删除访客（根据访客 ID 删除）
     * @param id 待删除访客的 ID
     * @return 影响的行数（成功返回 1，失败返回 0）
     */
    @Override
    public int deleteVisitor(Integer id) {
        // 执行删除操作（调用 MyBatis-Plus 基础 Mapper 的根据 ID 删除方法）
        int i = visitorMapper.deleteById(id);
        return i;
    }
}
